'-> Mattonite Editor by Stefano Maria Regattin
'i> 13 ottobre 1996
'm> 14,16,17,18,19,20,25,26,30 ottobre 1996
'm> 3 luglio 1997
'm> 12 novembre 1997 
'm> 10,18 dicembre 1997
'm> 15 febbraio 1998 
'm> 19,20,21,22,24,30 maggio 2000
'm> 17 luglio 2000 
'm> 6 dicembre 2000
'm> 24 gennaio 2002
'------------------- 
OGGETTI$="MattoniteStandardObjects.Abk"
BANCO=65535
POSIZIONELINEAMAGGIORE=255
POSIZIONELINEAMINORE=0
Dim MATTONCINO(246),X0ZONA(246),Y0ZONA(246)
Global FILE$,LIVELLO$,NOMEFILE$,OGGETTI$,PERCORSO$,PERCORSODEILIVELLI$
Global PERCORSODEGLIOGGETTI$
Global BANCO,BLULINEAMINORE,BONUS,C0LORELINEAMAGGIORE,C0LORELINEAMINORE
Global CONVERSIONERIUSCITA,LINEAMAGGIORE
Global LIVELLO,LINEE,POSIZIONELINEAMAGGIORE,POSIZIONELINEAMINORE
Global RAGIONEDELROSSO#,RAGIONEDELVERDE#,RAGIONEDELBLU#
Global ROSSOLINEAMINORE,VERDELINEAMINORE
Global MATTONCINO(),X0ZONA(),Y0ZONA()
Proc INDIVIDUALAPOSIZIONEDELPROGRAMMA
Proc IMPOSTAIPERCORSIDEIFILE
Proc IMPOSTALOSCHERMO
Proc IMPOSTALARCOBALENO
Proc IMPOSTAILAMPEGGI
Proc CARICAGLIOGGETTI
Proc IMPOSTAICOLORI
Proc IMPOSTALEZONEDEIMATTONCINI
Proc IMPOSTALABARRADISCORRIMENTO
Proc MOSTRALEZONE
Proc MOSTRALALINEAATTIVA
LINEAMAGGIORE=True
Proc MOSTRALALINEAATTIVA
Ink 62 : Bar 20,209 To 29,218
Ink 61 : Polyline 20,217 To 20,209 To 28,209
Polyline 24,211 To 22,213 To 22,214 To 24,216
Ink 63 : Polyline 21,218 To 29,218 To 29,210
Polyline 27,211 To 25,213 To 25,214 To 27,216
Set Zone 248,20,209 To 29,218
Get Icon 1,20,209 To 29+1,218+1
Ink 62 : Bar 30,209 To 39,218
Ink 61 : Polyline 30,217 To 30,209 To 38,209
Polyline 32,211 To 34,213 To 34,214 To 32,216
Ink 63 : Polyline 31,218 To 39,218 To 39,210
Polyline 35,211 To 37,213 To 37,214 To 35,216
Set Zone 249,30,209 To 39,218
Get Icon 2,30,209 To 39+1,218+1
Set Zone 250,233,209 To 264,223
Set Zone 251,233,225 To 264,239
Set Zone 252,233,241 To 264,255
Set Zone 253,273,0 To 319,255
Proc MOSTRAILLIVELLO
Paste Icon 64,209,1
Set Zone 254,64,209 To 73,218
Paste Icon 74,209,2
Set Zone 255,74,209 To 83,218
Proc MOSTRAILBONUS
Paste Icon 140,209,1
Set Zone 256,140,209 To 149,218
Paste Icon 150,209,2
Set Zone 257,150,209 To 159,218
Set Zone 258,0,248 To 31,255 : Rem Load 
Set Zone 259,40,248 To 71,255 : Rem Save 
Set Zone 260,80,248 To 159,255 : Rem Line 
Set Zone 261,0,240 To 55,247 : Rem Rainbow
Set Zone 262,56,240 To 71,247 : Rem Arrow up 
Set Zone 263,72,240 To 87,247 : Rem Arrow down 
Set Zone 264,160,209 To 191,216 : Rem Quit 
Ink 29,32 : Text 160,216,"Quit"
Limit Mouse 
Paste Bob 0,209,83
MATTONCINO=1
Do 
 XTOPO=X Screen(X Mouse)
 YTOPO=Y Screen(Y Mouse)
 TASTODELTOPOCLICCATO=Mouse Click
 TASTODELTOPOPREMUTO=Mouse Key
 ZONATOPO=Mouse Zone
 If TASTODELTOPOPREMUTO=1
  If ZONATOPO>0 and ZONATOPO<248
   If MATTONCINO=0
    Ink 0 : Bar X0ZONA(ZONATOPO-1),Y0ZONA(ZONATOPO-1) To X0ZONA(ZONATOPO-1)+19,Y0ZONA(ZONATOPO-1)+9
   Else 
    Paste Bob X0ZONA(ZONATOPO-1),Y0ZONA(ZONATOPO-1),MATTONCINO+82
   End If 
   MATTONCINO(ZONATOPO-1)=MATTONCINO
  Else If ZONATOPO>249 and ZONATOPO<253
   If LINEAMAGGIORE=True
    ROSSO=C0LORELINEAMAGGIORE/256
    VERDE=C0LORELINEAMAGGIORE/16 mod 16
    BLU=C0LORELINEAMAGGIORE mod 16
   Else 
    ROSSO=C0LORELINEAMINORE/256
    VERDE=C0LORELINEAMINORE/16 mod 16
    BLU=C0LORELINEAMINORE mod 16
   End If 
   If ZONATOPO=250
    ROSSO=(XTOPO-233)/2
    Hslider 233,209 To 264,223,16,ROSSO,1
    Ink 0 : Bar 217,216 To 232,223
    ROSSO$=Str$(ROSSO)-" " : Ink 29,32 : Text 233-Len(ROSSO$)*8,222,ROSSO$
   Else If ZONATOPO=251
    VERDE=(XTOPO-233)/2
    Hslider 233,225 To 264,239,16,VERDE,1
    Ink 0 : Bar 217,232 To 232,239
    VERDE$=Str$(VERDE)-" " : Ink 29,32 : Text 233-Len(VERDE$)*8,238,VERDE$
   Else If ZONATOPO=252
    BLU=(XTOPO-233)/2
    Hslider 233,241 To 264,255,16,BLU,1
    Ink 0 : Bar 217,248 To 232,255
    BLU$=Str$(BLU)-" " : Ink 29,32 : Text 233-Len(BLU$)*8,254,BLU$
   End If 
   C0LORE=ROSSO*256+VERDE*16+BLU
   Colour 1,C0LORE
   If LINEAMAGGIORE=True
    C0LORELINEAMAGGIORE=C0LORE
    Rain(0,POSIZIONELINEAMAGGIORE)=C0LORELINEAMAGGIORE
   Else 
    C0LORELINEAMINORE=C0LORE
    Rain(0,POSIZIONELINEAMINORE)=C0LORELINEAMINORE
   End If 
   Rainbow 0,257,0,271
  Else If ZONATOPO=253
   If YTOPO>POSIZIONELINEAMINORE
    Ink 0 : Draw 273,POSIZIONELINEAMAGGIORE To 319,POSIZIONELINEAMAGGIORE
    POSIZIONELINEAMAGGIORE=YTOPO
    LINEAMAGGIORE=True
    Proc MOSTRALALINEAATTIVA
   End If 
  Else If ZONATOPO=258
   Inverse On : Print At(0,31);"Load"; : Inverse Off 
   Proc CARICAILLIVELLO
   Proc DABANCOAVARIABILI
   Rainbow 0,257,0,271
   Proc MOSTRAIMATTONCINI
   Proc MOSTRAILBONUS
   Proc MOSTRALEZONE
   Proc MOSTRALALINEAATTIVA
   LINEAMAGGIORE= Not LINEAMAGGIORE
   Proc MOSTRALALINEAATTIVA
  Else If ZONATOPO=259
   Inverse On : Print At(5,31);"Save"; : Inverse Off 
   Proc DAVARIABILIABANCO
   Proc SALVAILLIVELLO
   Proc MOSTRALEZONE
   Proc MOSTRALALINEAATTIVA
  End If 
 Else If TASTODELTOPOPREMUTO=2
  If ZONATOPO=253
   If YTOPO<POSIZIONELINEAMAGGIORE
    Ink 0 : Draw 273,POSIZIONELINEAMINORE To 319,POSIZIONELINEAMINORE
    POSIZIONELINEAMINORE=YTOPO
    LINEAMAGGIORE=False
    Proc MOSTRALALINEAATTIVA
   End If 
  Else If ZONATOPO=254
   Add LIVELLO,-1,0 To 999
   Proc MOSTRAILLIVELLO
  Else If ZONATOPO=255
   Add LIVELLO,1,0 To 999
   Proc MOSTRAILLIVELLO
  Else If ZONATOPO=256
   Add BONUS,-1,0 To 9999999
   Proc MOSTRAILBONUS
  Else If ZONATOPO=257
   Add BONUS,1,0 To 9999999
   Proc MOSTRAILBONUS
  End If 
 End If 
 If TASTODELTOPOCLICCATO=1
  If ZONATOPO=248
   Add MATTONCINO,-1,0 To 33
   If MATTONCINO=0
    Ink 0 : Bar 0,209 To 19,218 : Ink 29 : Box 0,209 To 19,218
   Else 
    Paste Bob 0,209,82+MATTONCINO
   End If 
  Else If ZONATOPO=249
   Add MATTONCINO,1,0 To 33
   If MATTONCINO=0
    Ink 0 : Bar 0,209 To 19,218 : Ink 29 : Box 0,209 To 19,218
   Else 
    Paste Bob 0,209,82+MATTONCINO
   End If 
  Else If ZONATOPO=254
   Add LIVELLO,-1,0 To 999
   Proc MOSTRAILLIVELLO
  Else If ZONATOPO=255
   Add LIVELLO,1,0 To 999
   Proc MOSTRAILLIVELLO
  Else If ZONATOPO=256
   Add BONUS,-1,0 To 9999999
   Proc MOSTRAILBONUS
  Else If ZONATOPO=257
   Add BONUS,1,0 To 9999999
   Proc MOSTRAILBONUS
  Else If ZONATOPO=260
   LINEAMAGGIORE= Not LINEAMAGGIORE
   Proc MOSTRALALINEAATTIVA
  Else If ZONATOPO=261
   Inverse On : Print At(0,30);"Rainbow"; : Inverse Off 
   LINEE=POSIZIONELINEAMAGGIORE-POSIZIONELINEAMINORE+1
   If LINEE>2
    Proc CALCOLALARAGIONEDELROSSODELVERDEEDELBLU
    Proc PROGRESSIONECOLORI
   Else 
    Bell 1
   End If 
   Proc MOSTRALEZONE
   Proc MOSTRALALINEAATTIVA
  Else If ZONATOPO=262
   Inverse On : Print At(7,30);Chr$(147);Chr$(148); : Inverse Off 
   If LINEAMAGGIORE=True
    If POSIZIONELINEAMAGGIORE>0 and POSIZIONELINEAMAGGIORE>POSIZIONELINEAMINORE+1
     Ink 0 : Draw 273,POSIZIONELINEAMAGGIORE To 319,POSIZIONELINEAMAGGIORE
     Dec POSIZIONELINEAMAGGIORE
     Wait 5
    End If 
   Else 
    If POSIZIONELINEAMINORE>0
     Ink 0 : Draw 273,POSIZIONELINEAMINORE To 319,POSIZIONELINEAMINORE
     Dec POSIZIONELINEAMINORE
     Wait 5
    End If 
   End If 
   Proc MOSTRALEZONE
   Proc MOSTRALALINEAATTIVA
  Else If ZONATOPO=263
   Inverse On : Print At(9,30);Chr$(149);Chr$(150); : Inverse Off 
   If LINEAMAGGIORE=True
    If POSIZIONELINEAMAGGIORE<255
     Ink 0 : Draw 273,POSIZIONELINEAMAGGIORE To 319,POSIZIONELINEAMAGGIORE
     Inc POSIZIONELINEAMAGGIORE
     Wait 5
    End If 
   Else 
    If POSIZIONELINEAMINORE<255 and POSIZIONELINEAMINORE<POSIZIONELINEAMAGGIORE-1
     Ink 0 : Draw 273,POSIZIONELINEAMINORE To 319,POSIZIONELINEAMINORE
     Inc POSIZIONELINEAMINORE
     Wait 5
    End If 
   End If 
   Proc MOSTRALEZONE
   Proc MOSTRALALINEAATTIVA
  Else If ZONATOPO=264
   Exit 
  End If 
 End If 
Loop 
Rainbow Del 0 : Screen Close 0 : Erase All : End 
Procedure CALCOLALARAGIONEDELROSSODELVERDEEDELBLU
 ROSSOLINEAMAGGIORE=C0LORELINEAMAGGIORE/256
 ROSSOLINEAMINORE=C0LORELINEAMINORE/256
 RAGIONEDELROSSO#=(ROSSOLINEAMAGGIORE-ROSSOLINEAMINORE)/(LINEE-1.0)
 VERDELINEAMAGGIORE=C0LORELINEAMAGGIORE/16 mod 16
 VERDELINEAMINORE=C0LORELINEAMINORE/16 mod 16
 RAGIONEDELVERDE#=(VERDELINEAMAGGIORE-VERDELINEAMINORE)/(LINEE-1.0)
 BLULINEAMAGGIORE=C0LORELINEAMAGGIORE mod 16
 BLULINEAMINORE=C0LORELINEAMINORE mod 16
 RAGIONEDELBLU#=(BLULINEAMAGGIORE-BLULINEAMINORE)/(LINEE-1.0)
End Proc
Procedure CARICAGLIOGGETTI
 Load PERCORSODEGLIOGGETTI$+OGGETTI$
End Proc
Procedure CARICAILLIVELLO
 Erase BANCO
 LIVELLO$="Livello"+Str$(LIVELLO)-" "
 FILE$=PERCORSODEILIVELLI$+LIVELLO$
 If Exist(FILE$)
  Open In 1,FILE$
  MARCATORE$=Input$(1,9)
  LUNGHEZZABANCO=Lof(1)
  Close 1
  If MARCATORE$="Mattonite"
   Reserve As Work BANCO,LUNGHEZZABANCO
   Bload FILE$,Start(BANCO)
  End If 
 End If 
End Proc
Procedure DABANCOAVARIABILI
 If Length(BANCO)>0
  INDIRIZZO=Start(BANCO)+9
  For A=0 To 246
   MATTONCINO(A)=Peek(INDIRIZZO)
   Inc INDIRIZZO
  Next A
  For A=0 To 255
   ARCOBALENO=Peek(INDIRIZZO)
   Inc INDIRIZZO
   ARCOBALENO=ARCOBALENO+Peek(INDIRIZZO)*$100
   Rain(0,A)=ARCOBALENO
   Inc INDIRIZZO
  Next A
  BONUS=Peek(INDIRIZZO)
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*100
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*10000
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*1000000
  Inc INDIRIZZO
  Print At(0,29);
  If INDIRIZZO=Start(BANCO)+Length(BANCO)
   Print "Level";LIVELLO;" loaded";
  Else 
   Print "Data error";
  End If 
 Else 
  Print At(0,29);"Level not loaded";
 End If 
 Wait 100
 Print At(0,29);Space$(28);
End Proc
Procedure DAVARIABILIABANCO
 Reserve As Work BANCO,772
 INDIRIZZO=Start(BANCO)
 Poke$ INDIRIZZO,"Mattonite"
 Add INDIRIZZO,9
 For A=0 To 246
  Poke INDIRIZZO,MATTONCINO(A)
  Inc INDIRIZZO
 Next A
 For A=0 To 255
  ARCOBALENO=Rain(0,A)
  Poke INDIRIZZO,ARCOBALENO mod $100
  Inc INDIRIZZO
  Poke INDIRIZZO,ARCOBALENO/$100
  Inc INDIRIZZO
 Next A
 Poke INDIRIZZO,BONUS mod 100
 Inc INDIRIZZO
 Poke INDIRIZZO,BONUS/100 mod 100
 Inc INDIRIZZO
 Poke INDIRIZZO,BONUS/10000 mod 100
 Inc INDIRIZZO
 Poke INDIRIZZO,BONUS/1000000 mod 100
 Inc INDIRIZZO
 Print At(0,29);
 If INDIRIZZO=Start(BANCO)+Length(BANCO)
  Print "Level";LIVELLO;" converted";
  CONVERSIONERIUSCITA=True
 Else 
  Print "Data error";
  CONVERSIONERIUSCITA=False
 End If 
 Wait 100
 Print At(0,29);Space$(28);
End Proc
Procedure INDIVIDUALAPOSIZIONEDELPROGRAMMA
 PERCORSO$=Dir$
End Proc
Procedure IMPOSTAICOLORI
 Get Bob Palette 
End Proc
Procedure IMPOSTAILAMPEGGI
 Flash 20,"(0FF,2)(FFF,1)(0FF,2)(000,1)"
 Flash 21,"(F70,2)(FFF,1)(F70,2)(000,1)"
 Flash 22,"(F77,9)(FF7,9)(7F7,9)(7FF,9)(77F,9)(F7F,9)"
End Proc
Procedure IMPOSTAIPERCORSIDEIFILE
 PERCORSODEGLIOGGETTI$=PERCORSO$+"Grafica/"
 PERCORSODEILIVELLI$=PERCORSO$+"Livelli/"
End Proc
Procedure IMPOSTALABARRADISCORRIMENTO
 Set Slider 61,61,29,1,63,63,29,1
End Proc
Procedure IMPOSTALARCOBALENO
 Set Rainbow 0,0,271,"","","" : Rainbow 0,257,0,271
End Proc
Procedure IMPOSTALEZONEDEIMATTONCINI
 Reserve Zone 264
 Ink 29 : Polyline 272,0 To 272,208 To 0,208
 For M=0 To 246
  LINEADIMATTONCINI=M/13
  RIGADIMATTONCINI=M mod 13
  X0ZONA(M)=RIGADIMATTONCINI*21
  Y0ZONA(M)=LINEADIMATTONCINI*11
  MATTONCINO(M)=1
  If MATTONCINO(M)>0 Then Paste Bob X0ZONA(M),Y0ZONA(M),82+MATTONCINO(M)
  Set Zone M+1,X0ZONA(M),Y0ZONA(M) To X0ZONA(M)+20,Y0ZONA(M)+10
 Next M
End Proc
Procedure IMPOSTALOSCHERMO
 Screen Open 0,320,256,64,Lowres
 Curs Off : Flash Off : Pen 29 : Paper 0 : Cls 
End Proc
Procedure MOSTRAILBONUS
 CIFRA=BONUS/1000000 mod 10
 Ink 29,32 : Text 84,216,Str$(CIFRA)-" "
 CIFRA=BONUS/100000 mod 10
 Ink 29,32 : Text 92,216,Str$(CIFRA)-" "
 CIFRA=BONUS/10000 mod 10
 Ink 29,32 : Text 100,216,Str$(CIFRA)-" "
 CIFRA=BONUS/1000 mod 10
 Ink 29,32 : Text 108,216,Str$(CIFRA)-" "
 CIFRA=BONUS/100 mod 10
 Ink 29,32 : Text 116,216,Str$(CIFRA)-" "
 CIFRA=BONUS/10 mod 10
 Ink 29,32 : Text 124,216,Str$(CIFRA)-" "
 CIFRA=BONUS mod 10
 Ink 29,32 : Text 132,216,Str$(CIFRA)-" "
End Proc
Procedure MOSTRAILLIVELLO
 CIFRA=LIVELLO/100 mod 10
 Ink 29,32 : Text 40,216,Str$(CIFRA)-" "
 CIFRA=LIVELLO/10 mod 10
 Ink 29,32 : Text 48,216,Str$(CIFRA)-" "
 CIFRA=LIVELLO mod 10
 Ink 29,32 : Text 56,216,Str$(CIFRA)-" "
End Proc
Procedure MOSTRAIMATTONCINI
 For M=0 To 246
  If MATTONCINO(M)=0
   Ink 0 : Bar X0ZONA(M),Y0ZONA(M) To X0ZONA(M)+19,Y0ZONA(M)+9
  Else 
   Paste Bob X0ZONA(M),Y0ZONA(M),MATTONCINO(M)+82
  End If 
 Next M
End Proc
Procedure MOSTRALALINEAATTIVA
 If LINEAMAGGIORE=True
  C0LORELINEAMAGGIORE=Rain(0,POSIZIONELINEAMAGGIORE)
  Colour 1,C0LORELINEAMAGGIORE
  Ink 1 : Bar 264,208 To 272,255
  Ink 29 : Box 264,208 To 272,255
  ROSSO=C0LORELINEAMAGGIORE/256
  VERDE=C0LORELINEAMAGGIORE/16 mod 16
  BLU=C0LORELINEAMAGGIORE mod 16
  Ink 29 : Draw 272,POSIZIONELINEAMAGGIORE To 281,POSIZIONELINEAMAGGIORE
  Ink 32 : Draw 310,POSIZIONELINEAMAGGIORE To 319,POSIZIONELINEAMAGGIORE
 Else 
  C0LORELINEAMINORE=Rain(0,POSIZIONELINEAMINORE)
  Colour 1,C0LORELINEAMINORE
  Ink 1 : Bar 264,208 To 272,255
  Ink 29 : Box 264,208 To 272,255
  ROSSO=C0LORELINEAMINORE/256
  VERDE=C0LORELINEAMINORE/16 mod 16
  BLU=C0LORELINEAMINORE mod 16
  Ink 29 : Draw 272,POSIZIONELINEAMINORE To 281,POSIZIONELINEAMINORE
  Ink 32 : Draw 310,POSIZIONELINEAMINORE To 319,POSIZIONELINEAMINORE
 End If 
 Hslider 233,209 To 264,223,16,ROSSO,1
 Ink 0 : Bar 217,216 To 232,223
 ROSSO$=Str$(ROSSO)-" " : Ink 29,32 : Text 233-Len(ROSSO$)*8,222,ROSSO$
 Hslider 233,225 To 264,239,16,VERDE,1
 Ink 0 : Bar 217,232 To 232,239
 VERDE$=Str$(VERDE)-" " : Ink 29,32 : Text 233-Len(VERDE$)*8,238,VERDE$
 Hslider 233,241 To 264,255,16,BLU,1
 Ink 0 : Bar 217,248 To 232,255
 BLU$=Str$(BLU)-" " : Ink 29,32 : Text 233-Len(BLU$)*8,254,BLU$
 Locate 10,31
 If LINEAMAGGIORE=True Then Print "Major"; Else Print "Minor";
End Proc
Procedure MOSTRALEZONE
 Print At(0,30);Space$(28);At(0,30);"Rainbow";Chr$(147);Chr$(148);Chr$(149);Chr$(150)
 Print At(0,31);Space$(28);At(0,31);"Load Save       line";
End Proc
Procedure PROGRESSIONECOLORI
 Shared LINEE,RAGIONEDELROSSO#,RAGIONEDELVERDE#,RAGIONEDELBLU#
 Shared ROSSOLINEAMINORE,VERDELINEAMINORE,BLULINEAMINORE
 For LINEA=1 To LINEE-2
  ROSSO=ROSSOLINEAMINORE+(LINEA)*RAGIONEDELROSSO#
  VERDE=VERDELINEAMINORE+(LINEA)*RAGIONEDELVERDE#
  BLU=BLULINEAMINORE+(LINEA)*RAGIONEDELBLU#
  C0LORE=ROSSO*256+VERDE*16+BLU
  Rain(0,POSIZIONELINEAMINORE+LINEA)=C0LORE : Rainbow 0,257,0,271
  Bell 96
 Next LINEA
End Proc
Procedure SALVAILLIVELLO
 If CONVERSIONERIUSCITA=True
  LIVELLO$="Livello"+Str$(LIVELLO)-" "
  FILE$=PERCORSODEILIVELLI$+LIVELLO$
  Bsave FILE$,Start(BANCO) To Start(BANCO)+Length(BANCO)
  Print At(0,29);"Level";LIVELLO;" saved";
  Wait 100
  Print At(0,29);Space$(28);
 End If 
End Proc
